{# Template for C++ class source file #}
{% if file_header %}
{{ file_header }}

{% endif %}
{%- if includes %}
{{ includes }}

{% endif %}
{%- if namespace_parts %}
namespace {{ namespace_parts | join('::') }} {

{% endif %}
{%- if constructors %}
{% for ctor in constructors %}
{{ ctor.signature }} {
{% if ctor.body %}
{{ ctor.body | indent(4, first=False) }}
{% else %}
    // TODO: Implement constructor
{% endif %}
}

{% endfor %}
{% endif %}
{%- if destructor %}

{{ destructor.signature }} {
{% if destructor.body %}
{{ destructor.body | indent(4, first=False) }}
{% else %}
    // TODO: Implement destructor
{% endif %}
}
{% endif %}
{%- if methods %}

{% for method in methods %}
{{ method.signature }} {
{% if method.body %}
{{ method.body | indent(4, first=False) }}
{% else %}
    throw std::runtime_error("{{ method.name }}: Not implemented");
{% endif %}
}

{% endfor %}
{% endif %}
{%- if namespace_parts %}

}  // namespace {{ namespace_parts | join('::') }}
{%- endif %}
